package com.ruyuan.dependency.product.api;

import com.ruyuan.dependency.product.vo.SkuIdAndStock;
import com.ruyuan.dependency.product.vo.SkuVo;
import com.ruyuan.dependency.product.vo.SpuVo;
import com.ruyuan.dependency.product.vo.UnlockStockRequest;
import com.ruyuan.seckilling.common.MapResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author zhonghuashishan
 */
@FeignClient("dependency-product-system")
@RequestMapping("/product")
public interface ProductApi {
    /**
     * 根据skuId查询商品信息
     */
    @GetMapping("/queryBySkuId")
    SkuVo queryBySkuId(@RequestParam("skuId") Long skuId);

    /**
     * 根据多个skuId批量查询商品信息
     */
    @PostMapping("/queryBySkuIds")
    List<SkuVo> queryBySkuIds(@RequestBody List<Long> skuIds);

    /**
     * 根据spuId查询spu信息
     */
    @GetMapping("/queryBySpuId")
    SpuVo queryBySpuId(@RequestParam("spuId") Long spuId);

    /**
     * 根据skuId和指定的商品数量锁定对应的商品库存
     */
    @PutMapping("/lockStock")
    Boolean lockStock(@RequestParam("skuId") Long skuId, @RequestParam("count") Integer count);

    /**
     * 根据skuId和指定的商品数量锁定对应的商品库存
     */
    @PutMapping("/releaseStock")
    Boolean releaseStock(@RequestParam("skuId") Long skuId, @RequestParam("count") Integer count);

    /**
     * 根据多个skuId和指定的商品数量批量释放商品库存
     */
    @PostMapping("/batchReleaseStock")
    MapResult batchReleaseStock(@RequestBody List<SkuIdAndStock> skuIdAndStockList);

}
